#define _CRT_SECURE_NO_WARNINGS
#include "Stack.h"


//void Stacktest1()
//{
//	ST ps;
//	STInit(&ps);
//	STPush(&ps, 1);
//	STPush(&ps, 2);
//	STPush(&ps, 3);
//	STPush(&ps, 4);
//	while (ps.top)
//	{
//		printf("%d ", STTop(&ps));
//		STPop(&ps);
//	}
//	STDestroy(&ps);
//}
//
//
//int main()
//{
//	Stacktest1();
//	return 0;
//}

bool isValid(char* s)
{
    ST ps;
    STInit(&ps);

    while (*s)
    {
        if ((*s == '(') || (*s == '[') || (*s == '{'))
        {
            STPush(&ps, *s);
        }
        else
        {
            if (STEmpty(&ps))
            {
                STDestroy(&ps);
                return false;
            }
            char top = STTop(&ps);
            STPop(&ps);
            if ((*s == ')' && top != '(')
                || (*s == ']' && top != '[')
                || (*s == '}' && top != '{'))
            {
                STDestroy(&ps);
                return false;
            }
        }
        s++;
    }
    bool ret = STEmpty(&ps);
    STDestroy(&ps);
    return ret;
}
int main()
{
    char s[] = "([)]";
    printf("%s", isValid(s));
	return 0;
}